﻿/**
	@file	Game.cpp
	@date	2013/1/25
	@author	김진식(jeensig@gmail.com)
	@brief	메인 게임
*/
#include "Game.h"
#include "Start_Game.h"
#include "GameInterface.h"
#include "FuncClass.h"
#include "Input.h"
#include <Windows.h>
#include <iostream>

TetrisGame::TetrisGame() : 
		game_state_(STATE_MAINSCREEN), input_process_(NULL)
{
	current_state_ = new StartGame();
	current_state_->Init();
}

TetrisGame::~TetrisGame()
{
	delete current_state_;
}

/**
	@brief		게임이 실행된다.
	@remarks	초기화를 하고 메인 루프를 통해 게임을 실행한다.
*/
void TetrisGame::Render()
{
	current_state_->Render();
	Sleep(100);
}

/**
	@brief		게임이 실행된다.
	@remarks	초기화를 하고 메인 루프를 통해 게임을 실행한다.
*/
void TetrisGame::Update()
{
	current_state_->Update(this);
}

/**
	@brief		상태를 변화시킨다
	@remarks	새로 받는 상태로 변경시킨다.
*/
void TetrisGame::ChangeState(GameInterface* new_state)
{
	GameInterface* dummy = current_state_;

	current_state_ = new_state;

	delete dummy;

	current_state_->Init();
}

/**
	@brief		Input Process를 등록한다.
	@remarks	Input process를 등록한다.
*/
void TetrisGame::SetInputProcess(InputProcess* new_input)
{
	input_process_ = new_input;
}

/**
	@brief		Input Process를 반환한다.
	@remarks	Input process를 반환한다.
	@return		Input Process가 NULL이 아니면 Input Process를 넘긴다.
*/
InputProcess* TetrisGame::GetInputProcess()
{
	if(input_process_)
	{
		return input_process_;
	}
	else
	{
		return NULL;
	}
}